/* 
 * File:   main.cpp
 * Author: thiagojesus
 *
 * Created on May 21, 2012, 7:40 PM
 */

#include <cstdlib>
#include <iostream>
#include <string>
#include "Cliente.h"
#include "Lista.cpp"
#include "Vacina.h"
#include "Frasco.h"
#include "Data.h"
#include "Agenda.h"
#include "Pacote.h"
#include "ItemAgenda.h"
#include "ItemCarteira.h"
#include "Carteira.h"


using namespace std;

/*
 * 
 */
int main(int argc, char** argv) {
    Cliente::Lista cli;
    Paciente::Listapac pac;
    Vacina::Listavac vac, vacp;
    Frasco::ListaFrasco fras;
    Doenca::Listadoe doen;
    ItemAgenda::listaItemAG AG;
    Cliente *t;
    Paciente*p;
    Vacina *v;
    Doenca *d;
    Frasco *f;
    Pacote *pct = new Pacote();
    ItemAgenda *ia;
    static Agenda a;
    Data dt(0,0,0);
    int n,op, cod,cpf, idade, ncli=0,aux, nvac=0, preco,codfras, dtnasc,mnasc,anasc,npac;
    string nome,nomepac, desc,sint, conseq;
    Carteira c;
    double valor;
    char sn='s';
    
    inicLista(&cli);
    inicLista(&pac);
    inicLista(&vac);
    inicLista(&fras);
    inicLista(&doen);
    ncli = Cliente::carregar(&cli);
    nvac = Vacina::carregar(&vac);
    AG = a.getLag();
    a.carregar(&AG);
    Vacina::imprimirListavac(&vac);
    while(sn == 's'){
        cout<<"Bem vindo ao Gerenciador da Clinica de Vacinas\nDigite a opcao desejada:\n";
    cout<<"1- Cadastro\n2- Pesquisa\n3- Vendas\n4- Exclusao\n5- Sair";
    cout<<"\nSua opcao:";
    cin>>op;
    switch(op){
        case 1://system("clear");
               cout<<"Cadastro\nDigite a opcao desejada:\n";
               cout<<"1- Cliente\n2- Paciente\n3- Vacina\n4- Frasco\n5- Voltar ao menu inicial";
               cout<<"\n Sua Opcao:";
               cin>>op;
               switch(op){
                   case 1://system("clear");
                          cout<<"Nome:";
                          getline(cin,nome);
                          getline(cin,nome);
                          cout<<"CPF:";
                          cin>>cpf;
                          cout<<"Quantidade de pacientes:";
                          cin>>n;
                          for(int i=0;i<n;i++){
                              cout<<"Nome:";
                              getline(cin,nomepac);
                              getline(cin,nomepac);
                              cout<<"Data de nascimento: dd mm aaaa";
                            
                              cin>>dtnasc;
                              cin>>mnasc;
                              cin>>anasc;
                              
                              cout<<"Numero Carteira:";
                              cin>>cod;
                              c.setNumCarteira(cod);
                              p = new Paciente(nomepac,dtnasc,mnasc,anasc,c);
                              cadastrar(&pac,p);
                              
                          }
                          t= new Cliente(nome,cpf,pac,n);
                          cadastrar(&cli,t);
                          ncli++;
                          inicLista(&pac);
                          break;
                   case 2:cout<<"Nome do cliente responsavel: ";
                          cin.ignore(100,'\n');
                          getline(cin,nome);
                          t = Cliente::pesquisar(&cli,nome);
                          cout<<"Nome:";
                          cin.ignore(100,'\n');
                          getline(cin,nomepac);
                          cout<<"Data de nascimento: dd mm aaaa";
                          cin>>dtnasc;
                          cin>>mnasc;
                          cin>>anasc;
                          cout<<"Numero Carteira:";
                          cin>>cod;
                          
                          c.setNumCarteira(cod);
                          p = new Paciente(nomepac,dtnasc,mnasc,anasc,c);
                          pac = t->getPaciente();
                          aux = t->getNpac();
                          aux++;
                          t->setNpac(aux);
                          cadastrar(&pac,p);
                          inicLista(&pac);
                          break;
                   case 3:cout<<"Descricao:";
                          getline(cin,nome);
                          getline(cin,nome);
                          cout<<"Idade para aplicacao:";
                          cin>>idade;
                          cout<<"Preco:";
                          cin>>preco;
                          cout<<"Numero de doencas combativeis:";
                          cin>>cod;
                          cin.ignore(100,'\n');
                          for(n=0;n<cod;n++){
                              cout<<"Descricao:";
                              //getline(cin,desc);
                              getline(cin,desc);
                              cout<<"Sintoma:";
                              //getline(cin,sint);
                              getline(cin,sint);
                              cout<<"Consequencias:";
                              //getline(cin,conseq);
                              getline(cin,conseq);
                              d = new Doenca(desc,sint,conseq);
                              cadastrar(&doen,d);
                          }
                          aux =0;
                          cout<<"Numero de frascos";
                          cin>>aux;
                          for(n=0;n<aux;n++){
                              cout<<"Codigo rotulo "<<n+1<<":";
                              cin>>codfras;
                              f = new Frasco(codfras);
                              cadastrar(&fras,f);
                          }
                          v = new Vacina(cod,aux,nome,idade,preco,doen,fras);
                          nvac++;
                          cadastrar(&vac,v);
                          inicLista(&doen);
                          inicLista(&fras);
                          break;
                   case 4:cout<<"Codigo rotulo:";
                          cin>>codfras;
                          cout<<"Digite a descricao da vacina contida no rotulo:";
                          getline(cin,nome);
                          getline(cin,nome);
                          v = Vacina::pesquisar(&vac,nome);
                          if(v!=NULL){
                              fras = v->getFras();
                              aux = v->getNfras();
                              f = new Frasco(codfras);
                              cadastrar(&fras,f);
                              aux++;
                              v->setNfras(aux);
                              inicLista(&fras);
                          }
               }
               break;
        case 2:cout<<"Pesquisa\nDigite a opcao desejada:\n";
               cout<<"1- Cliente\n2- Paciente\n3- Vacina\n4- Voltar ao menu principal";
               cout<<"\n Sua Opcao:";
               cin>>op;
               switch (op){
                   case 1:cout<<"nome do cliente: ";
                          cin.ignore(100,'\n');
                          getline(cin,nome);
                          t=NULL;
                          t = Cliente::pesquisar(&cli,nome);
                          if(t!=NULL){
                              cpf = t->getCpf();
                              cout<<"Nome: "<<nome<<"\n"<<"CPF: "<<cpf<<"\n";
                              pac = t->getPaciente();
                              Paciente::imprimirListapac(&pac);
                              
                          }
                          break;
                   case 2:cout<<"nome do cliente: ";
                          cin.ignore(100,'\n');
                          getline(cin,nome);
                          t = Cliente::pesquisar(&cli,nome);
                          if(t!=NULL){
                              cout<<"Nome do Paciente:";
                              getline(cin,nomepac);
                              pac = t->getPaciente();
                              p = Paciente::pesquisar(&pac,nomepac);
                              dt = p->getNasc();
                              cout<<"Nome:"<<p->getNome()<<"\nData de Nascimento: "<<dt.GetDia()<<"/"<<dt.GetMes()<<"/"<<dt.GetAno()<<"\n";
                              inicLista(&pac);
                          }
                          break;
                   case 3:cout<<"Descricao vacina:";
                          getline(cin,desc);
                          getline(cin,desc);
                          v = Vacina::pesquisar(&vac,desc);
                          if(v!=NULL){
                              cout<<"Descricao:"<<v->getDescricao()<<"\nIdade para aplicacao:"<<v->getIdade()<<"\nPreco:"<<v->getPreco()<<"\n";
                              cout<<"Doencas que previne:\n";
                              doen = v->getContra();
                              Doenca::imprimirListadoe(&doen);
                              cout<<"Frascos disponiveis:\n";
                              fras = v->getFras();
                              Frasco::imprimirListaFras(&fras);
                              inicLista(&doen);
                              inicLista(&fras);
                          }
               }
               break;
        case 3:pct->elaborarPacote(&cli, &vac, &nome, &nomepac);
               vacp = pct->getVacpac();
               Vacina::imprimirListavac(&vacp);
               do{
                   cout<<"Vendas\nDigite a opcao desejada:\n";
                   cout<<"1- Adicionar Vacina\n2- Remover\n3- Calcular valor\n4- Aceitar\n5- Voltar ao menu principal";
                   cout<<"\n Sua Opcao:";
                   cin>>op; 
                   switch(op){
                   case 1:pct->addVacina(&vac);
                   break;
                   case 2:pct->removeVacina();
                   break;
                   case 3:valor = pct->calcularValorTotal();
                          cout<<"Valor total:"<<valor;
                          break;
                   case 4:ia = pct->aceitarPacote(nome, nomepac, &cli);
                          a.atualizaAgenda(ia);
                          break;
                   }
               }while (op != 5);
               break;
               
        case 4:cout<<"Exclusao\nDigite a opcao desejada:\n";
               cout<<"1- Cliente\n2- Paciente\n3- Vacina";
               cout<<"\n Sua Opcao:";
               cin>>op;  
               switch(op){
                   case 1:cout<<"nome:";
                          getline(cin,nome);
                          getline(cin,nome);
                          t = Cliente::pesquisar(&cli,nome);
                          if(t!=NULL){
                              deletar(&cli,t);
                              ncli--;
                          }
                          break;
                   case 2:cout<<"nome:";
                          getline(cin,nome);
                          getline(cin,nome);
                          t = Cliente::pesquisar(&cli,nome);
                          if(t!=NULL){
                              cout<<"Nome Paciente:";
                              getline(cin,nome);
                              pac = t->getPaciente();
                              npac = t->getNpac();
                              p = Paciente::pesquisar(&pac,nome);
                              if(p!=NULL){
                                  deletar(&pac,p);
                                  npac--;
                                  t->setNpac(npac);
                              }
                          }
                          break;
                   case 3:cout<<"Nome Vacina:";
                          getline(cin,nome);
                          getline(cin,nome);
                          v = Vacina::pesquisar(&vac,nome);
                          if(v!=NULL){
                              deletar(&vac,v);
                              nvac--;
                              
                          }
               }
               break;
        case 5:if(ncli!=0){
                Cliente::salvar(&cli,ncli);
               } 
                if(nvac!=0){
                Vacina::imprimirListavac(&vac);
                Vacina::salvar(&vac,nvac);
                AG = a.getLag();
                Agenda::salvar(&AG,a.getNcomp());
                
               }
            
                return 0;
                break;
               
    }
     cout<<"Deseja realizar outra operacao? (s/n)";
     cin>>sn;   
    }
    
    
    //Cliente::imprimirLista(&cli);

    return 0;
}

